8.4 输入和输出
类UNIX的操作系统如此伟大的一个原因是,一个程序的输出可以是另一个程序的输入这一理念。依照这个哲学,这类操作系统创建了一系列的简单程序,每个程序只做一件事,并把这件事做得非常好。之后,将这些程序组合在一起,可以创建一些脚本做一些很惊艳的事情。这些程序使用 stdin
和 stdout
设备作为通道,在进程之间传递数据。
同样的理念扩展到了标准库的 io
包,而且提供的功能很神奇。这个包可以以流的方式高效处理数据,而不用考虑数据是什么,数据来自哪里,以及数据要发送到哪里的问题。与 stdout
和 stdin
对应,这个包含有 io.Writer
和 io.Reader
两个接口。所有实现了这两个接口的类型的值,都可以使用 io
包提供的所有功能,也可以用于其他包里接受这两个接口的函数以及方法。这是用接口类型来构造函数和API最美妙的地方。开发人员可以基于这些现有功能进行组合,利用所有已经存在的实现,专注于解决业务问题。
有了这个概念,让我们先看一下 io.Writer
和 io.Reader
接口的声明,然后再来分析展示了 io
包神奇功能的代码。